package com.zhuhjay.common.base.annotation;

import com.zhuhjay.common.base.constant.ApiLimiterConstants;
import com.zhuhjay.common.base.enums.LimiterEnums;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static com.zhuhjay.common.base.enums.LimiterEnums.IP;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 接口访问限制注解
 * @author ZhuHJay
 * @date 2023/2/25 17:59
 */
@Target({METHOD, TYPE})
@Retention(RUNTIME)
@Documented
public @interface ApiLimiter {
    /**
     * 限制流量
     **/
    int limit() default ApiLimiterConstants.DEFAULT_LIMIT;

    /**
     * 单位时间s
     **/
    int expire() default ApiLimiterConstants.DEFAULT_EXPIRE;

    /**
     * 限流策略 {@link LimiterEnums}
     **/
    LimiterEnums strategy() default IP;

    /**
     * 自定义提示消息
     **/
    String message() default ApiLimiterConstants.DEFAULT_MESSAGE;

}
